home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacWorld 1999 February
/
Macworld (1999-02).dmg
/
Cinema 4D GO demo
/
Gumption Plug-ins
/
Plug-ins
/
Freeware
/
Spiral
/
spiral.cof
Wrap
Text File
|
1998-02-17
|
3KB
|
109 lines
// Made by Mikael Sterner 1997 Thanks to: Checkerboard_c.cof and hexedit :-)
FillData(data)
{
// count
data->SetValue(0,6.0);
data->SetValue(1,1.0);
// color 1
data->SetValue(2,1.0);
data->SetValue(3,0.0);
data->SetValue(4,0.0);
// color 2
data->SetValue(5,0.0);
data->SetValue(6,0.0);
data->SetValue(7,1.0);
}
EditData(data)
{
// Make new dialog
var d=new(SimpleDialog);
// Set edit fields of dialog
d->SetData(0,"Spiral size",FIELD_FLOAT,0.01,100000,data->GetValue(0));
d->SetData(1,"Rotations/second",FIELD_FLOAT,-100000,100000,data->GetValue(1));
d->SetData(2,"Red 1",FIELD_PERCENT,0.0,1.0,data->GetValue(2));
d->SetData(3,"Green 1",FIELD_PERCENT,0.0,1.0,data->GetValue(3));
d->SetData(4,"Blue 1",FIELD_PERCENT,0.0,1.0,data->GetValue(4));
d->SetData(5,"Red 2",FIELD_PERCENT,0.0,1.0,data->GetValue(5));
d->SetData(6,"Green 2",FIELD_PERCENT,0.0,1.0,data->GetValue(6));
d->SetData(7,"Blue 2",FIELD_PERCENT,0.0,1.0,data->GetValue(7));
d->SetTitle("Rotating spiral (>0 = out 0 = fixed <0 = in)");
// start dialog
if (!d->DoDialog()) return FALSE;
// if sucessful copy dialog values into key data
data->SetValue(0,d->GetData(0));
data->SetValue(1,d->GetData(1));
data->SetValue(2,d->GetData(2));
data->SetValue(3,d->GetData(3));
data->SetValue(4,d->GetData(4));
data->SetValue(5,d->GetData(5));
data->SetValue(6,d->GetData(6));
data->SetValue(7,d->GetData(7));
return TRUE;
}
GetOutput(data,p,n,time)
{
var c,c1,c2,x,y,angle,r;
time = time*(data->GetValue(1)*(-1));
time = time-floor(time);
x = ( p.x - 0.5 ) * 2;
y = ( p.y - 0.5 ) * 2;
r = sqrt(x*x + y*y); // calculate distance from center
if (x>0) {
if (y>0) angle = atan(x/y);
else angle = abs(atan(y/x))+(atan(1)*2);
}
if (x<0) {
if (y<0) angle = atan(x/y)+(atan(1)*4);
else angle = abs(atan(y/x))+(atan(1)*6);
}
if (angle!=0) angle = angle / ((atan(1))*8); // 74
c1 = vector(data->GetValue(2),data->GetValue(3),data->GetValue(4));
c2 = vector(data->GetValue(5),data->GetValue(6),data->GetValue(7));
if ((angle!=0)&&(time!=0)) angle = (angle + time)-floor(angle + time);
r = r*data->GetValue(0);
if (angle!=0) r = r + angle;
r = r-floor(r);
if (r>0.5){
c = c1;
if ((angle==0)&&(y>0)) c=c1;
if ((angle==0)&&(y<0)) c=c2;
}
else {
c = c2;
if ((angle==0)&&(y>0)) c=c2;
if ((angle==0)&&(y<0)) c=c1;
}
return c;
}
main()
{
RegisterChannelShader(30444,8,"FillData","EditData","GetOutput");
}